Java - tutorial - 03/13- data types

revision:


data types

Data types are divided into two groups:

primitive data types - includes byte, short, int, long, float, double, boolean and char;
non-primitive data types - such as string, arrays and classes.

A primitive data type specifies the size and type of variable values, and it has no additional methods. There are eight primitive data types in Java:

Data Type Size Description
byte - 1 byte - stores whole numbers from -128 to 127
short - 2 bytes - stores whole numbers from -32,768 to 32,767
int - 4 bytes - stores whole numbers from -2,147,483,648 to 2,147,483,647
long - 8 bytes - stores whole numbers from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
float - 4 bytes - stores fractional numbers. Sufficient for storing 6 to 7 decimal digits
double - 8 bytes - stores fractional numbers. Sufficient for storing 15 decimal digits
boolean - 1 bit - stores true or false values
char - 2 bytes - stores a single character/letter or ASCII values

primitive number types are divided into two groups:

integer types stores whole numbers, positive or negative (such as 123 or -456), without decimals. Valid types are byte, short, int and long. Which type you should use, depends on the numeric value.
Floating point types represents numbers with a fractional part, containing one or more decimals. There are two types: float and double.

The byte data type can store whole numbers from -128 to 127. This can be used instead of int or other integer types to save memory when you are certain that the value will be within -128 and 127.

example:

        public class Main {
            public static void main(String[] args) {
              byte myNum = 100;
              System.out.println(myNum);  // 100
            }
        }
    

The short data type can store whole numbers from -32768 to 32767:

example:

        public class Main {
            public static void main(String[] args) {
              short myNum = 5000;
              System.out.println(myNum);  // 5000
            }
          }
    

The int data type can store whole numbers from -2147483648 to 2147483647. In general, the int data type is the preferred data type when we create variables with a numeric value.

example:

        public class Main {
            public static void main(String[] args) {
              int myNum = 100000;
              System.out.println(myNum);  // 100000
            }
          }
    

The long data type can store whole numbers from -9223372036854775808 to 9223372036854775807. This is used when int is not large enough to store the value.
Note that you should end the value with an "L".

example:

 
        public class Main {
            public static void main(String[] args) {
              long myNum = 15000000000L;
              System.out.println(myNum);  // 15000000000
            }
          }
    

The float data type can store fractional numbers from 3.4e−038 to 3.4e+038. Note that you should end the value with an "f".

example:

        public class Main {
            public static void main(String[] args) {
              float myNum = 5.75f;
              System.out.println(myNum);  //5.75
            }
          }
    

The double data type can store fractional numbers from 1.7e−308 to 1.7e+308. Note that you should end the value with a "d".

example:

        public class Main {
            public static void main(String[] args) {
              double myNum = 19.99d;
              System.out.println(myNum);  //19.99
            }
          }
    

!!!! The precision of a floating point value indicates how many digits the value can have after the decimal point. The precision of float is only six or seven decimal digits, while double variables have a precision of about 15 digits. Therefore it is safer to use double for most calculations.

A floating point number can also be a scientific number with an "e" to indicate the power of 10.

example:

        public class Main {
            public static void main(String[] args) {
              float f1 = 35e3f;
              double d1 = 12E4d;
              System.out.println(f1); //35000.0
              System.out.println(d1);  // 120000.0
            }
          }
    

A Boolean data type is declared with the boolean keyword and can only take the values "true" or "false". Boolean values are mostly used for conditional testing

example:

        public class Main {
            public static void main(String[] args) {
              boolean isJavaFun = true;
              boolean isFishTasty = false;    
              System.out.println(isJavaFun); // true
              System.out.println(isFishTasty); // false
            }
          }
    

The char data type is used to store a single character. The character must be surrounded by single quotes, like 'A' or 'c'. Alternatively, you can use ASCII values to display certain characters.

example:

        public class Main {
            public static void main(String[] args) {
              char myGrade = 'B';
              System.out.println(myGrade); // B
            }
        }
    

example:

        public class Main {
            public static void main(String[] args) {
              char myVar1 = 65, myVar2 = 66, myVar3 = 67;
              System.out.println(myVar1); // A
              System.out.println(myVar2); // B
              System.out.println(myVar3); // C
            }
        }
    

The String data type is used to store a sequence of characters (text). String values must be surrounded by double quotes.

example:

        public class Main {
            public static void main(String[] args) {
              String greeting = "Hello World";
              System.out.println(greeting); // Hello World
            }
        }
    

Non-primitive data types are called reference types because they refer to objects.

The main difference between primitive and non-primitive data types are:

Primitive types are predefined (already defined) in Java. Non-primitive types are created by the programmer and is not defined by Java (except for String).
Non-primitive types can be used to call methods to perform certain operations, while primitive types cannot.
A primitive type has always a value, while non-primitive types can be null.
A primitive type starts with a lowercase letter, while non-primitive types starts with an uppercase letter.
The size of a primitive type depends on the data type, while non-primitive types have all the same size.


type casting

type casting is when you assign a value of one primitive data type to another type.In Java, there are two types of casting:

widening casting (automatically): converting a smaller type to a larger type size: e.g. byte -> short -> char -> int -> long -> float -> double

narrowing casting (manually): converting a larger type to a smaller size type: e.g. double -> float -> long -> int -> char -> short -> byte

widening casting is done automatically when passing a smaller size type to a larger size type.

example:

      public class Main {
        public static void main(String[] args) {
          int myInt = 9;
          double myDouble = myInt; // automatic casting: int to double
          System.out.println(myInt); // 9
          System.out.println(myDouble); // 9.0
        }
      }
    

narrowing casting must be done manually by placing the type in parentheses in front of the value.

example:

      public class Main {
        public static void main(String[] args) {
          double myDouble = 9.78d;
          int myInt = (int) myDouble; // explicit casting: double to int
          System.out.println(myDouble); // 9.78
          System.out.println(myInt); // 9
        }
      }